package com.reger.core.utils;

import java.text.DecimalFormat;
import java.text.NumberFormat;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public abstract class NumberUtils {
	
	private static final Logger log = LoggerFactory.getLogger(NumberUtils.class);
	
	public static NumberFormat numberFormat= new DecimalFormat("#.00");
	
	public static boolean isNumber(String source) {
		if (StringUtils.isEmpty(source))
			return false;
		try {
			Long.parseLong(source);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	public static boolean isDouble(String source) {
		if (StringUtils.isEmpty(source))
			return false;
		try {
			Double.parseDouble(source);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	public static Long parseLong(String source) {
		try {
			return Long.parseLong(source);
		} catch (Exception e) {
			log.info("数据'{}'转化为long类型异常",source,e);
		}
		return null;
	}

	public static Integer parseInt(String source) {
		try {
			return Integer.parseInt(source);
		} catch (Exception e) {
			log.info("数据'{}'转化为Integer类型异常",source,e);
		}
		return null;
	}

	public static Double parseDouble(String source) {
		try {
			return Double.parseDouble(source);
		} catch (Exception e) {
			log.info("数据'{}'转化为Double类型异常",source,e);
		}
		return null;
	}

	public static Float parseFloat(String source) {
		try {
			return Float.parseFloat(source);
		} catch (Exception e) {
			log.info("数据'{}'转化为Float类型异常",source,e);
		}
		return null;
	}
	
	/**
	 * 指定格式格式化字符串为数字
	 * @param source 待转化的字符串
	 * @param format 数字格式
	 * @return 格式化的结果
	 */
	public static Number parseDouble(String source,String format) {
		try {
			if(format==null||(format=format.trim()).isEmpty())
				return numberFormat.parse(format);
			return new DecimalFormat(format).parse(source);
		} catch (Exception e) {
			log.info("数据'{}'转化为Double类型异常",source,e);
		}
		return null;
	}
	
	/**
	 * 格式化数字为字符串
	 * @param number 待格式化的数字
	 * @param format 格式，默认是 ‘#.00’
	 * @return 格式化后的字符串
	 */
	public static String format(Number number,String format) {
		if(format==null||(format=format.trim()).isEmpty())
			return numberFormat.format(number);
		return new DecimalFormat(format).format(number);
	}
	
	/**
	 * 格式化数字为字符串，格式为‘#.00’
	 * @param number 待格式化的数字
	 * @return 格式化后的字符串
	 */
	public static String format(Number number){
		return format(number, null);
	}
	
}
